问题描述
- 通过adb重启设备会出现杂音,全频段的杂音
- 正常重启也会出现
- 系统启动后如果播放任意一段音频后杂音消失
- 系统关机后重新开机或者pmic reset后开机均没有此现象
问题分析
- 首先怀疑codec的配置问题,由于android7.1属于系统升级,在android5.1中没有这个现象,对比kernel中的配置完全一样
- 通过示波器测量codec i2c 控制信号,以及i2s的数据信号,确定speaker的信号源就是来自i2s
- 进一步对比两套代码在i2s的配置发现,android5.1中在codec suspend时会将i2s的gpio配置为普通gpio
解决方法
至此找到问题的root cause,解决方法就是在suspend时将i2s配置为普通gpio。
patch
1 | diff --git a/kernel/arch/arm/boot/dts/rk3288-xxx.dtsi b/kernel/arch/arm/boot/dts/rk3288-xxx.dtsi |
1 | diff --git a/kernel/arch/arm/boot/dts/rk3288.dtsi b/kernel/arch/arm/boot/dts/rk3288.dtsi |